package com.company.exam12;

import java.sql.*;

public class TEstDriver {
    public static void main(String[] args) {
        // 数据库查询操作
        dbTest01();
        // 数据库查询7839员工操作，并修改更新
        dbTest02("JAN","SAL",7839);
        dbTest01();
        dbTest03();
        dbTest04();
    }

    /**
     * jdbc操作数据库--查询语句
     */
    public static void dbTest01() {

        // （1）加载数据库驱动；
        // 数据库连接串 -- 指明数据库连接的方式 【不同数据库连接串不一样】
        // 连接串中的 localhost 表示本机，也可以使用 127.0.0.1表示本机
        // 还可以使用数据库服务器在局域网中的服务器名，或者ip地址
        // Oracle
        String strURLOracle = "jdbc:oracle:thin:@localhost:1521:XE"; // orcl 表示Oracle数据库安装的实例名，默认是orcl，如果不是默认，则改成自己的

        // 数据库的驱动类名
        // Oracle
        String strDriverClassNameOracle = "oracle.jdbc.driver.OracleDriver";
        // 数据库用户名
        String strUserName = "scott"; // 改成自己的
        // 数据库密码
        String strUserPsw = "a123456"; // 改成自己的
        try {
            // 加载数据库驱动类 -- 反射
            Class.forName(strDriverClassNameOracle); // 需要根据数据库进行调换

            // （2）获取数据库连接对象 Connection；
            // 第一个参数是数据库连接串，需要根据数据库调换
            Connection connection = DriverManager.getConnection(strURLOracle, strUserName, strUserPsw);
            // （3）通过数据库连接获取查询器对象 Statement或者PreparedStatement；
            Statement statement = connection.createStatement();
            // （4）准备数据库操作的SQL语句；
            String strSql = "select * from scott.emp";
            // （5）执行数据库操作SQL语句，获取查询结果集ResultSet或者是运行结果；
            ResultSet resultSet = statement.executeQuery(strSql);
            // （6）如果是查询操作的话，解析ResultSet结果集中的数据，进行相关业务逻辑处理；
            //System.out.println("执行结果：" + resultSet);
            while (resultSet.next()) {
                int EMPNO = resultSet.getInt(1);
                String ENAME = resultSet.getString(2);
                String JOB = resultSet.getString(3);
                int MGR = resultSet.getInt(4);
                String HIREDATE = resultSet.getString(5);
                int SAL = resultSet.getInt(6);
                int COMM = resultSet.getInt(7);
                int DEPTNO = resultSet.getInt(8);

                System.out.println(EMPNO + "," + ENAME+ "," + JOB+ "," + MGR+ "," + HIREDATE+ "," + SAL+ "," + COMM+ "," + DEPTNO);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * jdbc操作数据库--修改语句
     */
    public static void dbTest02(String ename,String job,int deptno) {

        // （1）加载数据库驱动；
        // 数据库连接串 -- 指明数据库连接的方式 【不同数据库连接串不一样】
        // 连接串中的 localhost 表示本机，也可以使用 127.0.0.1表示本机
        // 还可以使用数据库服务器在局域网中的服务器名，或者ip地址
        // Oracle
        String strURLOracle = "jdbc:oracle:thin:@localhost:1521:XE"; // orcl 表示Oracle数据库安装的实例名，默认是orcl，如果不是默认，则改成自己的

        // 数据库的驱动类名
        // Oracle
        String strDriverClassNameOracle = "oracle.jdbc.driver.OracleDriver";
        // 数据库用户名
        String strUserName = "scott"; // 改成自己的
        // 数据库密码
        String strUserPsw = "a123456"; // 改成自己的

        try {
            // 加载数据库驱动类 -- 反射
            Class.forName(strDriverClassNameOracle); // 需要根据数据库进行调换

            // （2）获取数据库连接对象 Connection；
            // 第一个参数是数据库连接串，需要根据数据库调换
            Connection connection = DriverManager.getConnection(strURLOracle, strUserName, strUserPsw);
            // （3）通过数据库连接获取查询器对象 Statement或者PreparedStatement；
            //Statement statement = connection.createStatement();
            // （4）准备数据库操作的SQL语句；
            String strSql = "update emp set ename=?,job=?  where deptno=?";

            PreparedStatement ps = connection.prepareStatement(strSql);
            ps.setString(1, ename);
            ps.setString(2, job);
            ps.setInt(3, deptno);
            //执行sql语句
            int count=ps.executeUpdate();
            //处理结果
            System.out.println(count);
            if (count>0){
                System.out.println("修改成功！");
            }else{
                System.out.println("修改失败！");
            }
            ps.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * jdbc操作数据库--删除语句
     */
    public static void dbTest03() {

        // （1）加载数据库驱动；
        // 数据库连接串 -- 指明数据库连接的方式 【不同数据库连接串不一样】
        // 连接串中的 localhost 表示本机，也可以使用 127.0.0.1表示本机
        // 还可以使用数据库服务器在局域网中的服务器名，或者ip地址
        // Oracle
        String strURLOracle = "jdbc:oracle:thin:@localhost:1521:XE"; // orcl 表示Oracle数据库安装的实例名，默认是orcl，如果不是默认，则改成自己的

        // 数据库的驱动类名
        // Oracle
        String strDriverClassNameOracle = "oracle.jdbc.driver.OracleDriver";
        // 数据库用户名
        String strUserName = "scott"; // 改成自己的
        // 数据库密码
        String strUserPsw = "a123456"; // 改成自己的

        try {
            // 加载数据库驱动类 -- 反射
            Class.forName(strDriverClassNameOracle); // 需要根据数据库进行调换

            // （2）获取数据库连接对象 Connection；
            // 第一个参数是数据库连接串，需要根据数据库调换
            Connection connection = DriverManager.getConnection(strURLOracle, strUserName, strUserPsw);
            // （3）通过数据库连接获取查询器对象 Statement或者PreparedStatement；
            Statement statement = connection.createStatement();
            // （4）准备数据库操作的SQL语句；
            String strSql = "delete from scott.emp where empno=8000;";
            //执行sql语句
            int count=statement.executeUpdate(strSql);
            //处理结果
            System.out.println(count);
            if (count>0){
                System.out.println("删除成功！");
            }else{
                System.out.println("删除失败！");
            }
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * jdbc操作数据库--插入语句
     */
    public static void dbTest04() {

        // （1）加载数据库驱动；
        // 数据库连接串 -- 指明数据库连接的方式 【不同数据库连接串不一样】
        // 连接串中的 localhost 表示本机，也可以使用 127.0.0.1表示本机
        // 还可以使用数据库服务器在局域网中的服务器名，或者ip地址
        // Oracle
        String strURLOracle = "jdbc:oracle:thin:@localhost:1521:XE"; // orcl 表示Oracle数据库安装的实例名，默认是orcl，如果不是默认，则改成自己的

        // 数据库的驱动类名
        // Oracle
        String strDriverClassNameOracle = "oracle.jdbc.driver.OracleDriver";
        // 数据库用户名
        String strUserName = "scott"; // 改成自己的
        // 数据库密码
        String strUserPsw = "a123456"; // 改成自己的

        try {
            // 加载数据库驱动类 -- 反射
            Class.forName(strDriverClassNameOracle); // 需要根据数据库进行调换

            // （2）获取数据库连接对象 Connection；
            // 第一个参数是数据库连接串，需要根据数据库调换
            Connection connection = DriverManager.getConnection(strURLOracle, strUserName, strUserPsw);
            // （3）通过数据库连接获取查询器对象 Statement或者PreparedStatement；
            Statement statement = connection.createStatement();
            // （4）准备数据库操作的SQL语句；
            String strSql = "insert into emp values (9000,'ONE','CLERK',9000,to_date('2021-03-17','yyyy-mm-dd'),5000,NULL,30)";
            //执行sql语句
            int count=statement.executeUpdate(strSql);//影响的行数
            //处理结果
            System.out.println(count);
            if (count>0){
                System.out.println("添加成功！");
            }else{
                System.out.println("添加失败！");
            }
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
